iT邦幫忙

2023 iThome 鐵人賽

DAY 6
1
自我挑戰組

重新學 Go 30 天系列 第 6

[GO30] Day6 function

  • 分享至 

  • xImage
  •  

基本介紹

以下是 Golang function 的基本語法:

func main() {
	result := add(1, 2)
	fmt.Println(result) // 3
}

func add(a, b int) int {
	return a + b
}

func 為 Go function 的保留字,int 表示該函式的回傳型態為整數,而 ab 則是函式的參數。在函式內部,使用 return 關鍵字回傳結果。

另外,如之前章節所說,如果 function 名稱第一個字母為大寫,表示能被其他 package 引用,例如:

// this function can be imported by other packages
func Add(a, b int) int {
	return a + b
}

匿名函示

func main() {
	result := func(a, b int) int {
		return a + b
	}(1, 2)

	fmt.Println(result) // 3
}

這裡的 func(a, b int) int { return a + b } 就是一個匿名函式,我們立即呼叫它並傳入參數 1 和 2。

defer function

defer 關鍵字用於函式返回後才執行。例如:

func main() {
	defer fmt.Println("world")
	fmt.Println("hello")
}

// hello
// world

這段程式碼會先印出 "hello",然後再印出 "world"。儘管 defer 關鍵字位於 fmt.Println("world") 的前面,但它會在 main 函式結束前執行。

function 常見寫法

用 struct 做為 function 參數

func main() {
	addParams := &AddParams{
		a: 1,
		b: 2,
	}
	result := add(addParams)
	fmt.Println(result) // 3
}

// ===

// use a struct as parameter for add function
type AddParams struct {
	a int
	b int
}

func add(params *AddParams) int { // 如上一章所說,這裡也可以傳入值,不用傳入指標
	return params.a + params.b
}

Return with Error

func main() {
	var addParams *AddParams // 使用 var 宣告指標變數,初始值為 nil 
	result, err := add(addParams)
	if err != nil {
		fmt.Println(err.Error()) // params is nil
		return
	}
	fmt.Println(result)
}

// ===

type AddParams struct {
	a int
	b int
}

func add(params *AddParams) (int, error) {
	if params == nil {
		return 0, errors.New("params is nil")
	}
	return params.a + params.b, nil
}

上一篇
[GO30] Day5 GO 指標
下一篇
[GO30] Day7 Loop
系列文
重新學 Go 30 天10
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言